﻿using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.IO;
using System.Runtime.Serialization;
using System.Runtime.Serialization.Formatters.Binary;
using BU;

namespace PlattegrondImport
{
    public class Serializer
    {
        /// <summary>
        /// Standaard constructor
        /// </summary>
        public Serializer()
        {
        }
        /// <summary>
        /// methode voor het serializen van de objecten
        /// </summary>
        /// <param name="filename"></param>
        /// <param name="objectToSerialize"></param>
        public void SerializeObject(string filename, ObjectToSerialize objectToSerialize)
        {
            Stream stream = File.Open(filename, FileMode.Create);
            BinaryFormatter bFormatter = new BinaryFormatter();
            bFormatter.Serialize(stream, objectToSerialize);
            stream.Close();
        }

        /// <summary>
        /// methode voor het deserializen van objecten
        /// </summary>
        /// <param name="filename"></param>
        /// <returns></returns>
        public ObjectToSerialize DeSerializeObject(string filename)
        {
            ObjectToSerialize objectToSerialize = new ObjectToSerialize();
            Stream stream = File.Open(filename, FileMode.Open);
            BinaryFormatter bFormatter = new BinaryFormatter();
            objectToSerialize = (ObjectToSerialize)bFormatter.Deserialize(stream);
            stream.Close();
            return objectToSerialize;
        }
    }

    [Serializable()]
    public class ObjectToSerialize : ISerializable
    {
        private List<Object> BUobjecten;

        /// <summary>
        /// Standaard constructor
        /// </summary>
        public ObjectToSerialize()
        {
        }

        /// <summary>
        /// Verzamelt de klassen die opgeslagen moeten worden
        /// </summary>
        /// <param name="info"></param>
        /// <param name="ctxt"></param>
        public ObjectToSerialize(SerializationInfo info, StreamingContext ctxt)
        {
            this.BUobjecten = (List<Object>)info.GetValue("Objecten", typeof(List<Object>));
        }


        /// <summary>
        /// Verzamelt de  informatie van klassen voor het deserializen
        /// </summary>
        /// <param name="info"></param>
        /// <param name="ctxt"></param>
        public void GetObjectData(SerializationInfo info, StreamingContext ctxt)
        {
            info.AddValue("Objecten", this.BUobjecten);
        }        
        
        /// <summary>
        /// Property voor lijst objecten
        /// </summary>
        public List<Object> BUObjecten
        {
            get { return BUobjecten; }
            set { BUobjecten = value; }
        }
    }
}
